package config

import (
	"dfx_cmdb/cmdb-agent/types"
	"fmt"
	"os"

	"gopkg.in/yaml.v3"
)

type Config struct {
	Listen      types.Listen   `yaml:"listen" json:"listen"`
	ServiceAddr string         `yaml:"service_addr" json:"service_addr"`
	LogConf     types.LogConf  `yaml:"log" json:"log"`
	Function    types.Function `yaml:"function" json:"function"`
}

func NewConfig() *Config {
	return &Config{}
}

func (c *Config) LoadConfig(path string) {
	f, err := os.ReadFile(path)
	if err != nil {
		panic(err)
	}
	err = yaml.Unmarshal(f, c)
	if err != nil {
		panic(err)
	}

}

// validateBlacklistConfig 验证黑名单配置,确保同时只有一个选项为 true
func ValidateBlacklistConfig(c *types.BlackList) error {
	count := 0

	if c.Haproxy {
		count++
	}
	if c.EBPF {
		count++
	}
	if c.Openresty {
		count++
	}

	if count == 0 {
		return fmt.Errorf("黑名单配置错误: 必须启用 Haproxy、EBPF 或 Openresty 中的一个")
	}

	if count > 1 {
		return fmt.Errorf("黑名单配置错误: Haproxy、EBPF 和 Openresty 只能同时启用一个")
	}

	return nil
}
